Ext.define('MyApp.controller.quartzCron.CronExpressionController', {
	extend : 'Ext.app.Controller',
	views : ['quartzCron.CronExpressionForm'],
	stores : [],
	models : [],
	refs : [
	// { ref: 'editButton', selector: 'quartzCron-grid button#edit' },
	],
	init : function() {
		this.control({
					// 反向解析按钮
					'cronexpression-form button#analysis' : {
						click : function(bth) {
							console.log(bth.up('form').getForm().getValues());
							/*
							 * bth.up('form').getForm().loadRecord(
							 * Ext.create('Ext.data.Store',{ 'weekOfDayEnd':3 }) );
							 */
						}
					},
					// 选择按钮为通配符的
					'cronexpression-form radio[inputValue=everyTime]' : {
						change : 'onRadioEveryTimeChange'
					},
					// 标签中 指定 文本框变更时
					'cronexpression-form checkbox[name=sencond_appoint]' : {
						change : function(nf, eOpts) {
							var radio = nf.up('fieldset').up('fieldset')
									.down('radio');
							radio.setValue(true);
							this.onSencond_appointChange(radio);
						}
					},
					// 标签中从 指定 单选按钮变更时
					'cronexpression-form radio[inputValue=sencond_appoint]' : {
						change : function(radio, eOpts) {
							if (radio.getValue()) {
								this.onSencond_appointChange(radio);
							}
						}
					},
					// 标签中从 '' 开始 每 '' 一次 文本框变更时
					'cronexpression-form numberfield[name^=startOn]' : {
						change : function(nf, eOpts) {
							var radio = nf.up('fieldset').down('radio');
							radio.setValue(true);
							this.onStartOnChange(radio);
						}
					},
					// 标签中从 '' 开始 每 '' 一次 单选按钮变更时
					'cronexpression-form radio[inputValue=startOn]' : {
						change : function(radio, eOpts) {
							if (radio.getValue()) {
								this.onStartOnChange(radio);
							}
						}
					},
					// 周标签中每月第 '' 周 的 星期 '' 文本框变更时
					'cronexpression-form numberfield[name^=weekOfDay]' : {
						change : function(nf, eOpts) {
							var radio = nf.up('fieldset').down('radio');
							radio.setValue(true);
							this.onWeekOfDayChange(radio);

						}
					},
					// 周标签中每月第 '' 周 的 星期 '' 单选按钮变更时
					'cronexpression-form radio[inputValue=weekOfDay]' : {
						change : function(radio, eOpts) {
							if (radio.getValue()) {
								this.onWeekOfDayChange(radio);
							}
						}
					},
					// 标签中周期从 '' - '' 文本框变更时
					'cronexpression-form numberfield[name^=cycle]' : {
						change : function(nf, eOpts) {
							var radio = nf.up('fieldset').down('radio');
							radio.setValue(true);
							this.onCycleChange(radio);
						}
					},
					// 标签中周期从 '' - '' 单选按钮变更时
					'cronexpression-form radio[inputValue=cycle]' : {
						change : function(radio, eOpts) {
							if (radio.getValue()) {
								this.onCycleChange(radio);
							}
						}
					},
					// 周标签中本月最后一个星期 文本框变更时
					'cronexpression-form numberfield[name=lastweekD]' : {
						change : function(nf, eOpts) {
							var radio = nf.up('fieldset').down('radio');
							radio.setValue(true);
							this.getTypeCronExpression(radio).setValue(nf
									.getValue()
									+ 'L');
						}
					},
					// 周标签中本月最后一个星期 单选按钮变更时
					'cronexpression-form radio[inputValue=lastweekOfmon]' : {
						change : function(radio, eOpts) {
							if (radio.getValue()) {
								this.getTypeCronExpression(radio)
										.setValue(radio.up('fieldset')
												.down('numberfield').getValue()
												+ 'L');
							}
						}
					},
					// 日标签中每月几号最近的工作日 文本框变更时
					'cronexpression-form numberfield[name=workDayStar]' : {
						change : function(nf, eOpts) {
							nf.up('fieldset').down('radio').setValue(true);
							nf.up('form').down('textfield[name=day]')
									.setValue(nf.getValue() + 'W');
						}
					},
					// 日标签中每月几号最近的工作日 单选按钮变更时
					'cronexpression-form radio[inputValue=workDay]' : {
						change : function(radio, eOpts) {
							if (radio.getValue()) {
								this.getTypeCronExpression(radio)
										.setValue(radio.up('fieldset')
												.down('numberfield').getValue()
												+ 'W');
							}
						}
					},
					// 日标签中本月最后一天 单选按钮变更时
					'cronexpression-form radio[inputValue=monthLastDay]' : {
						change : function(radio, eOpts) {
							if (radio.getValue()) {
								this.getTypeCronExpression(radio).setValue('L');
							}
						}
					},
					// 日月周中不指定 年中的每年
					'cronexpression-form radio[inputValue=no_appoint]' : {
						change : function(radio, eOpts) {
							if (radio.getValue()) {
								this.getTypeCronExpression(radio).setValue('?');
							}
						}
					},
					'cronexpression-form textfield[type=CronExpression]' : {
						change : function(tf, eOpts) {
							var second = tf.up('form').down('textfield[name=second]').getValue(),
								min = tf.up('form').down('textfield[name=min]').getValue(),
								hour = tf.up('form').down('textfield[name=hour]').getValue(),
								day = tf.up('form').down('textfield[name=day]').getValue(),
								month = tf.up('form').down('textfield[name=month]').getValue(),
								week = tf.up('form').down('textfield[name=week]').getValue(),
								year = tf.up('form').down('textfield[name=year]').getValue(),
								Cron = tf.up('form').down('textfield[name=Cron]');
							Cron.setValue(
									second
									+ ' '
									+ min
									+ ' '
									+ hour
									+ ' '
									+ day
									+ ' '
									+ month
									+ ' '
									+ week
									+ ' '
									+ year);
						}
					}
				});
	},
	/**
	 * 每次是工具类
	 * 
	 * @param {}
	 *            radio
	 * @param {}
	 *            eOpts
	 */
	onRadioEveryTimeChange : function(radio, eOpts) {
		if (radio.getValue()) {
			if ('year' == radio.getName()) {
				this.getTypeCronExpression(radio).setValue('');
			} else {
				this.getTypeCronExpression(radio).setValue('*');
			}
		}
	},
	onBaseChange : function(radio, prefix, separator) {
		var star = radio.up('fieldset').down('numberfield[name=' + prefix
				+ 'Star]'), end = radio.up('fieldset').down('numberfield[name='
				+ prefix + 'End]');
		this.getTypeCronExpression(radio).setValue(star.getValue() + separator
				+ end.getValue());
	},
	onWeekOfDayChange : function(radio) {
		this.onBaseChange(radio, 'weekOfDay', '#');
	},
	onCycleChange : function(radio) {
		this.onBaseChange(radio, 'cycle', '-');
	},
	onStartOnChange : function(radio) {
		this.onBaseChange(radio, 'startOn', '/');
	},
	/**
	 * 指定时的工具类
	 * 
	 * @param {}
	 *            radio
	 */
	onSencond_appointChange : function(radio) {
		var checkItems = radio.up('fieldset').down('fieldset').items, appointStr = '', i = 0;
		checkItems.each(function(item, index, len) {
					if (item.checked) {
						if (i == 0) {
							appointStr = item.inputValue;
						} else {
							appointStr = appointStr + ',' + item.inputValue;
						}
						i++;
					}
				}, this);
		if ('' != appointStr) {
			this.getTypeCronExpression(radio).setValue(appointStr);
		} else {
			this.getTypeCronExpression(radio).setValue('*');
		}
	},
	getTypeCronExpression : function(radio) {
		return radio.up('form').down('textfield[name=' + radio.getName() + ']');
	}
});